/**
 * 图片工具函数
 */

import { BASE_URL } from '../config/axios-config';
import { MINIO_CONFIG, IMAGE_SERVICE } from '../config/services';

/**
 * 检测URL是否为本地存储或MinIO URL，并转换为可访问的URL
 * @param {string} url 原始URL
 * @returns {string} 处理后的URL
 */
export function processImageUrl(url) {
  if (!url) {
    console.log('头像URL为空，返回默认头像');
    return getDefaultAvatarUrl();
  }
  
  // 调试日志
  console.log('原始头像URL:', url);
  
  // 处理以@开头的URL（数据库特殊格式）
  if (url.startsWith('@')) {
    url = url.substring(1); // 移除@前缀
    console.log('移除@前缀后的URL:', url);
  }
  
  // 如果是绝对URL或数据URL，直接返回
  if (url.startsWith('data:') || url.startsWith('blob:')) {
    console.log('保持原URL格式 (数据URL/blob):', url);
    return url;
  }

  // 对于https链接，直接返回
  if (url.startsWith('https://')) {
    console.log('保持原URL格式 (HTTPS):', url);
    return url;
  }
  
  // 检查是否为MinIO链接
  const isMinioUrl = url.includes('127.0.0.1:9090') || 
                    url.includes('localhost:9090') || 
                    url.includes('127.0.0.1:9000') || 
                    url.includes('localhost:9000') ||
                    url.includes('minio');
  
  // 检查当前环境 - 是否在穿透环境
  const isTunnelEnv = window.location.host.includes('47.109.146.201');
  
  // 如果在穿透环境，需要将所有MinIO链接替换为穿透地址
  if (isMinioUrl && isTunnelEnv) {
    // 从URL中提取文件路径部分（去掉服务器地址和端口）
    let filePath = '';
    
    // 处理不同格式的MinIO URL
    if (url.includes('localhost:9000') || url.includes('127.0.0.1:9000')) {
      // 格式: http://localhost:9000/bucket/path/to/file.ext
      filePath = url.split('/').slice(3).join('/');
      url = `${MINIO_CONFIG.tunnelEndpoint}/${filePath}`;
    } 
    else if (url.includes('localhost:9090') || url.includes('127.0.0.1:9090')) {
      // 格式: http://localhost:9090/bucket/path/to/file.ext
      // 从完整URL提取文件路径（去掉协议、主机名和端口）
      filePath = url.replace(/^https?:\/\/[^\/]+(:\d+)?\//, '');
      url = `${MINIO_CONFIG.tunnelEndpoint}/${filePath}`;
    }
    
    console.log('MinIO地址替换为穿透地址:', url);
    return url;
  }
  
  // 处理服务器上保存的相对路径头像 (以/开头)
  if (url.startsWith('/') && !url.startsWith('//')) {
    // 构建完整URL
    const baseApiUrl = BASE_URL.split('/api')[0]; // 获取不包含/api的基础URL
    const fullUrl = `${baseApiUrl}${url}`;
    console.log('相对路径转换为绝对URL:', fullUrl);
    return fullUrl;
  }
  
  // 本地路径处理
  if (url.startsWith('/api/uploads/') || url.startsWith('http://localhost') && url.includes('/api/uploads/')) {
    console.log('本地存储URL:', url);
    return url;
  }
  
  // 检查URL是否正确格式化
  if (!url.startsWith('http://') && !url.startsWith('https://')) {
    if (url.includes('/')) {
      // 看起来像是相对路径，转换为绝对路径
      const baseApiUrl = BASE_URL.split('/api')[0]; // 获取不包含/api的基础URL
      url = `${baseApiUrl}${url.startsWith('/') ? '' : '/'}${url}`;
      console.log('转换为绝对路径:', url);
    } else {
      // 不是有效的URL格式，返回默认头像
      console.log('无效的URL格式，返回默认头像');
      return getDefaultAvatarUrl();
    }
  }
  
  // 处理MinIO URL（本地环境时）
  if (isMinioUrl && !isTunnelEnv) {
    console.log('本地环境中的MinIO URL:', url);
    const proxyUrl = IMAGE_SERVICE.getProxyUrl(url);
    console.log('代理后的URL:', proxyUrl);
    return proxyUrl;
  }
  
  console.log('最终处理后的URL:', url);
  return url;
}

/**
 * 获取默认头像URL
 * @returns {string} 默认头像URL
 */
export function getDefaultAvatarUrl() {
  // 使用更可靠的默认头像URL
  return 'https://img.yzcdn.cn/vant/cat.jpeg';
}

/**
 * 处理图片加载错误
 * @param {Event} e 事件对象
 */
export function handleImageError(e) {
  console.log('图片加载失败:', e.target.src);
  e.target.src = getDefaultAvatarUrl();
  // 防止无限循环
  e.target.onerror = null;
} 